package com.blumov.fastbox.application.exceptions;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.blumov.fastbox.domain.exceptions.BusinessException;
import com.blumov.fastbox.domain.exceptions.NonBusinessException;

/**
 * esta implementacion analiza excepciones, logea y unifica el modelo de excepciones.<br>
 * Se logean las excepciones que no son de negocio porque indicarian algun <br>
 * error en la aplicacion.<br>
 * Las excepciones de negocio no se logean porque son señales validas, <br>
 * que informan al usuario y este puede reintentar la operacion.<br>
 * caso contrario es posible realizar otra implementacion que analice las excepciones a su manera.
 */
public class ExceptionAnalyzerImpl implements ExceptionAnalyzer {
	
	private static final Log LOGGER = LogFactory.getLog(ExceptionAnalyzerImpl.class);

	/* (non-Javadoc)
	 * @see com.epidataconsulting.vdh.networking.services.exceptions.ExceptionAnalyzer#analize(java.lang.Throwable)
	 */
	public void analize(Throwable aException) {
		if (aException instanceof BusinessException) {
			throw (BusinessException) aException;
		} else if (aException instanceof NonBusinessException) {
			LOGGER.error(aException, aException);
			throw (NonBusinessException) aException;
		} else {
			LOGGER.error(aException, aException);
			throw new NonBusinessException(aException);
		}
	}

}
